package com.yjy.user.service;

import com.yjy.user.vo.User;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.sql.Date;

@Service
public class UserService {

	// @Cacheable:缓存查询。先从缓存中查询有无数据，有则直接返回，无则执行方法并将返回值存入缓存。适用于读数据。
	// 如：username=testAA，则其缓存的key为“userCache::username=testAA”
	@Cacheable(value="userCache", key="'username='.concat(#root.args[0])")
	public User findOne(String username) {
		System.out.println("模拟从数据库取数据...");
		User user = new User(username, Date.valueOf("1995-05-05"), 24);
		return user;
	}

	// @CachePut:缓存添加。先执行方法，后将返回值存入缓存。适用于写数据
	@CachePut(value="userCache", key="'username='.concat(#root.args[0])")
	public User addUser(String username) {
		System.out.println("模拟将数据写入数据库...");
		User user = new User(username, Date.valueOf("2018-01-01"), 20);
		return user;
	}

	// @CacheEvict:缓存清除。先执行方法，后通过key将缓存里的数据删除。适用于删数据
	@CacheEvict(value="userCache", key="'username='.concat(#root.args[0])")
	public User delUser(String username) {
		System.out.println("模拟将数据从数据库删除...");
		User user = new User(username, Date.valueOf("2018-01-01"), 20);
		return user;
	}


}
